package consultas;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import Partido.PartidoSimple;
import equipos.Equipo;

/**
 * TODO: description
 */
public class HistorialVictorias {
    private int victoriasEquipo1, victoriasEquipo2;

    private int empates;

    public HistorialVictorias() {
        this.victoriasEquipo1 = 0;
        this.victoriasEquipo2 = 0;
        this.empates = 0;
    }

    public int getVictoriasEquipo1() {
        return this.victoriasEquipo1;
    }

    public void setVictoriasEquipo1(final int victoriasEquipo1) {
        this.victoriasEquipo1 = victoriasEquipo1;
    }

    public int getVictoriasEquipo2() {
        return this.victoriasEquipo2;
    }

    public void setVictoriasEquipo2(final int victoriasEquipo2) {
        this.victoriasEquipo2 = victoriasEquipo2;
    }

    public int getEmpates() {
        return this.empates;
    }

    public void setEmpates(final int empates) {
        this.empates = empates;
    }

    public List<PartidoSimple> victoriasEquipo(final Session session, final Equipo e1, final Equipo e2) {
        String consulta = "from PartidoSimple p where (p.equipo1 = :equipo1 " + "and p.equipo2 = :equipo2)";
        Query q = session.createQuery(consulta);
        q.setParameter("equipo1", e1);
        q.setParameter("equipo2", e2);

        return q.list();
    }

    public void victoriasEntreEquipos(final Session session, final Equipo e1, final Equipo e2) {
        List<PartidoSimple> local = this.victoriasEquipo(session, e1, e2);
        List<PartidoSimple> visitante = this.victoriasEquipo(session, e2, e1);

        this.aumentarCampoe1(local);

        this.aumentarCampoe2(visitante);
    }

    private void aumentarCampoe1(final List<PartidoSimple> partidos) {
        for (PartidoSimple p : partidos) {
            if (p.getCampoDeGolesEquipo1() > p.getCampoDeGolesEquipo2()) {
                this.victoriasEquipo1++;
            }
            if (p.getCampoDeGolesEquipo1() == p.getCampoDeGolesEquipo2()) {
                this.empates++;
            }
            if (p.getCampoDeGolesEquipo1() < p.getCampoDeGolesEquipo2()) {
                this.victoriasEquipo2++;
            }
        }
    }

    private void aumentarCampoe2(final List<PartidoSimple> partidos) {
        for (PartidoSimple p : partidos) {
            if (p.getCampoDeGolesEquipo1() > p.getCampoDeGolesEquipo2()) {
                this.victoriasEquipo2++;
            }
            if (p.getCampoDeGolesEquipo1() == p.getCampoDeGolesEquipo2()) {
                this.empates++;
            }
            if (p.getCampoDeGolesEquipo1() < p.getCampoDeGolesEquipo2()) {
                this.victoriasEquipo1++;
            }
        }
    }

}
